/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.atps.principal;

import br.com.atps.entidade.Locatario;
import br.com.util.DateUtil;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author fab.3226019666
 */
public class AgenciaTurismo {

    static boolean reciboValido = false; // casoo recibo fosse impresso agora, seria falso

    /**
     * Metodo principal para execucao do sistema.
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        Locatario loc1 = new Locatario();
        boolean executa = true;
        int op = 0;

        JOptionPane.showMessageDialog(null, "Bem vindo ao Sistema Locatario !!");
        Locatario.setValorDiaria(Double.parseDouble(JOptionPane.showInputDialog(null, "Defina o valor da Diaria:")));

        while (executa) {
            op = menu();
            switch (op) {
                case 1:
                    if (!loc1.isOcupado()) {
                        coletaDadosLocatario(loc1);
                    } else {
                        JOptionPane.showMessageDialog(null, "Quarto ocupado.");
                    }
                    break;
                case 2:
                    if (!loc1.isOcupado()) {
                        JOptionPane.showMessageDialog(null, "Quarto sem hospedes.");
                    } else {
                        registraSaida(loc1);
                        loc1 = new Locatario();
                    }
                    break;
                case 3:
                    Locatario.setValorDiaria(Double.parseDouble(JOptionPane.showInputDialog(null, "Defina o novo valor para a Diaria:")));
                    break;
                case 4:
                    JOptionPane.showMessageDialog(null, "Obrigado pela utilização do sistema");
                    executa = false;
                    break;
            }
        }
    }

    private static void coletaDadosLocatario(Locatario loc1) {
        boolean excecao = true;  // controle do laco 

        loc1.setNome(JOptionPane.showInputDialog(null, "Nome do responsavel\n"));
        while (excecao) {
            try {
                loc1.setNumPessoas(Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de pessoas")));
                reciboValido = true;
                excecao = false;
            } catch (Exception ex) { // captura a excecao caso o parse de errado
                if (JOptionPane.showConfirmDialog(null, "A quantidade de pessoas ou o valor da diaria está incorreto "
                        + "deseja reinforma-los?\n") == 0) {
                    excecao = true;
                    reciboValido = false;
                } // se ele nao confirmar ira retornar o laco
            }
        }
        loc1.setEntrada(getData("Entrada"));
        loc1.setOcupado(true);
    }

    /**
     * Metodo para colher do usuario a data. Para não precisar e ter 10
     * variaiveis no main e tratar tudo la.
     *
     * @param modo se e entrada ou saida
     * @return
     */
    public static Date getData(String modo) {
        int dia = -1;
        int mes = -1;
        int ano = -1;
        int hora = -1;
        int minuto = -1;
        boolean control1 = true; // controle do laco de coleta dos dados
        boolean control2 = true; // controle de laco de conversao dos dados
        while (control2) {
            while (control1) {
                try {
                    dia = Integer.parseInt(JOptionPane.showInputDialog("Informe o dia de " + modo));
                    mes = Integer.parseInt(JOptionPane.showInputDialog("Informe o mes de " + modo));
                    ano = Integer.parseInt(JOptionPane.showInputDialog("Informe o ano de " + modo));
                    hora = Integer.parseInt(JOptionPane.showInputDialog("Informe o hora de " + modo));
                    minuto = Integer.parseInt(JOptionPane.showInputDialog("Informe o minuto de " + modo));
                    control1 = false;
                } catch (Exception ex) { // caso alguma conversao de String para inteiro falhar, executa este trecho
                    JOptionPane.showMessageDialog(null, "Valor incorreto", "Atenção", JOptionPane.WARNING_MESSAGE);
                    control1 = false;
                    control2 = false;
                    if (JOptionPane.showConfirmDialog(null, "Deseja continuar com a data?\n") == 0) {
                        control1 = true;
                        control2 = true;
                    }
                }
            }
            if (control2) {
                try { // aqui chamamos o metodo de conversao.
                    return DateUtil.makeDate(dia, mes, ano, hora, minuto);
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Erro ao informar a Data, valor invalido \n" + ex.getMessage(), "Atenção", JOptionPane.WARNING_MESSAGE);
                    if (JOptionPane.showConfirmDialog(null, "Deseja continuar com a data?\n") == 0) {
                        control1 = true;
                        control2 = true;
                    } else {
                        control1 = false;
                        control2 = false;
                    }
                }
            }
        }
        return null; // caso nao seja possivel coletar a data, retornamos nulo
    }

    private static int menu() {
        String menu = "";
        int op;
        menu += "\n 1 - Registrar entrada em quarto";
        menu += "\n 2 - Registrar saída do quarto";
        menu += "\n 3 - Atualizar valor da diária";
        menu += "\n 4 - Sair";

        op = Integer.parseInt(JOptionPane.showInputDialog(menu));
        return op;
    }

    private static void registraSaida(Locatario loc1) {
        loc1.setSaida(getData("Saida"));
        if (reciboValido && (loc1.getEntrada() != null && loc1.getSaida() != null)) {
            JOptionPane.showMessageDialog(null, "Recibo:\n" + loc1.toString());
        } else {
            JOptionPane.showMessageDialog(null, "Recibo invalido:\n" + loc1.toString(), "recibo Invalido", JOptionPane.ERROR_MESSAGE);
        }
        System.out.println(loc1.toString());
    }
}
